/**************************
 * COMMON FUNCTION
 */

// show form field's error
function displayError(errors, showErr) {
	if (showErr == undefined) showErr = true;
	for (field in errors) {
		$('#'+field).addClass('error');
		if (showErr == true) {
			$('#'+field).parent().append('<span class="error">' + errors[field] + '</span>');
		}
	}
}

// hide form field's error
function resetError(values) {
	for (field in values) {
		$('#'+field).removeClass('error');
//		$('#'+field).next('.error').remove();
	}
	$('span.error').remove();
}

// check if array has no key
function isArrayEmpty(arr) {
	for (field in arr)
		return false;
	return true;
}

// combine array value to one string
function arrayToString(arr) {
	var res = '';
	for (field in arr)
		res += arr[field] + '\n';
	return res;
}

// simulate a form post
function postTo(action, method, params) {
	method = method || "post"; // Set method to post by default, if not specified.

	var form = document.createElement("form");
	form.setAttribute("method", method);
	form.setAttribute("action", action);

	for(var key in params) {
		if(params.hasOwnProperty(key)) {
			var hiddenField = document.createElement("input");
			hiddenField.setAttribute("type", "hidden");
			hiddenField.setAttribute("name", key);
			hiddenField.setAttribute("value", params[key]);
			form.appendChild(hiddenField);
		 }
	}
	
	var hiddenField = document.createElement("input");
	hiddenField.setAttribute("type", "hidden");
	hiddenField.setAttribute("name", "Submit");
	hiddenField.setAttribute("value", 1);
	form.appendChild(hiddenField);

	document.body.appendChild(form);
	form.submit();
}

/**************************
 * EVENT HANDLER
 */

// highlight selected row
function OnCheck(obj) {
	$(obj).parent().parent().toggleClass("selected");
	if (!obj.checked)
		$('[name="CheckAll"]').attr('checked', obj.checked);
}

// check/uncheck all checkbox
function onCheckAll(obj) {
	$("#frmDSNV :checkbox").attr('checked', obj.checked);
	if (obj.checked)
		$('#frmDSNV [name="MaNV[]"]').parent().parent().addClass('selected');
	else
		$('#frmDSNV [name="MaNV[]"]').parent().parent().removeClass('selected');
}

// create new NhanVien 
function onBtnAdd() {
	// get input
	var values = [];
	var frm = document.frmDSNV;
	values['HoTen'] = frm.HoTen.value;
	values['DiaChi'] = frm.DiaChi.value;
	values['NgaySinh'] = frm.NgaySinh.value;
	values['Phai'] = frm.Phai.value;
	values['Luong'] = frm.Luong.value;
	values['Phong'] = frm.Phong.value;
	resetError(values);
	
	// validate input
	var errors = validateNhanVien(values);
	if (!isArrayEmpty(errors)) {
		alert(arrayToString(errors));
		displayError(errors, false);
		return;
	}
	postTo("create.php", "post", values);
}

//create new NhanVien 
function onNhanVienSubmit() {
	// get input
	var values = [];
	var frm = document.frmNhanVien;
	values['HoTen'] = frm.HoTen.value;
	values['DiaChi'] = frm.DiaChi.value;
	values['NgaySinh'] = frm.NgaySinh.value;
	values['Phai'] = frm.Phai.value;
	values['Luong'] = frm.Luong.value;
	values['Phong'] = frm.Phong.value;
	resetError(values);
	
	// validate input
	var errors = validateNhanVien(values);
	if (!isArrayEmpty(errors)) {
		displayError(errors);
		return false;
	}
	return true;
}

// delete selected NhanVien
function onFrmDSNVSubmit() {
	var count = $('#frmDSNV [name="MaNV[]"]:checked').length;
	if ( count == 0)
		return false;
	var accept = confirm("Bạn có muốn xóa các nhân viên này?"); 
	if (!accept) return false;
	return true;
}

//check keypressed is number
function checkNumber(obj, length, e) {
	var key = window.event ? e.keyCode : e.which; 
	var len = obj.value.length + 1; 
	begin = (length <= 3)? 48 : 45; 
	
	if (key >= begin && key <= 57 && len <= length || (key == 8 || key == 0)) {
	}
	else return false;
}

//create new PhongBan
function onDSPBSubmit() {
	var values = [];
	var frm = document.frmPhongBan;
	values['TenPhong'] = frm.TenPhong.value;
	resetError(values);

	var errors = validatePhongBan(values);
	if (!isArrayEmpty(errors)) {
		alert(arrayToString(errors));
		displayError(errors, false);
		return false;
	}
	return true;
}

// create new PhongBan
function onPhongBanSubmit() {
	var values = [];
	var frm = document.frmPhongBan;
	values['TenPhong'] = frm.TenPhong.value;
	resetError(values);

	var errors = validatePhongBan(values);
	if (!isArrayEmpty(errors)) {
		displayError(errors);
		return false;
	}
	return true;
}

/**************************
 * NHANVIEN
 */

// validate NhanVien's input
function validateNhanVien(values) {
	var errors = [];
	checkHoTen(values, errors);
	checkNgaySinh(values, errors);
	checkDiaChi(values, errors);
	checkLuong(values, errors);
	return errors;	// return array of error detected
} 

// required, maxlen(20)
function checkHoTen(values, errors) {
	try {
		var value = values['HoTen'];
		if (value.length == 0) throw 'Chưa nhập họ tên';
		if (value.length > 20) throw 'Họ tên phải ngắn hơn 20 ký tự';
	} catch (msg) {
		errors['HoTen'] = msg;
	}
}

// required, format(dd/MM/yyyy)
function checkNgaySinh(values, errors) {
	try {
		var value = values['NgaySinh'];
		if (value.length == 0) throw 'Chưa nhập ngày sinh';
		var date = $.datepicker.parseDate( 'dd/mm/yy', value);	// throw exception if failed
	} catch (msg) {
		if (msg == 'Invalid date') msg = 'Ngày sinh không hợp lệ';
		errors['NgaySinh'] = msg;
	}
}

// maxlen(100)
function checkDiaChi(values, errors) {
	try {
		var value = values['DiaChi'];
		if (value.length > 100) throw 'Địa chỉ phải ngắn hơn 100 ký tự';
	} catch (msg) {
		errors['DiaChi'] = msg;
	}
}

// float
function checkLuong(values, errors) {
	try {
		var value = values['Luong'];
		if (value != '' && isNaN(parseInt(value))) throw 'Lương phải là số nguyên';
	} catch (msg) {
		errors['Luong'] = msg;
	}
}

// required, {0, 1}
function checkPhai(values, errors) {
	try {
		var value = values['Phai'];
		if (value == undefined) throw 'Chưa chọn giới tính';
	} catch (msg) {
		errors['Phai'] = msg;
	}
}


/**************************
 * PHONGBAN
 */

// validate PhongBan's input
function validatePhongBan(values) {
	var errors = [];
	checkTenPhong(values, errors);
	return errors;	// return array of error detected
} 

// required, maxlen(50)
function checkTenPhong(values, errors) {
	try {
		if (values['TenPhong'].length == 0) throw 'Chưa nhập tên phòng';
		if (values['TenPhong'].length > 50) throw 'Tên phòng phải lớn hơn 50 ký tự';
	} catch (msg) {
		errors['TenPhong'] = msg;
	}
}

